Variable Font Axes 可變字型軸

Masters 母版

母版就像是字型的基本模板。想象一下,它就是一個完整的字型樣式,包含了所有需要的文字。字型設計師通常會做幾個不同的母版,比如一個特別細的和一個特別粗的。

有了這些母版後,電腦就能自動創造出中間的樣式。舉個簡單的例子:如果你有一個很細的字型和一個很粗的字型,電腦可以自動幫你做出一個正常粗細的字型。

可變字型也用到了這個技術。當你調整字型粗細時,電腦就是在使用這些母版來顯示你想要的效果。不過要注意的是,如果你想讓字型從很細變到很粗,通常需要多做幾個母版,這樣變化才會更自然好看。

Instance 例項

例項就像是可變字型上的一個檔位,就好比普通字型裡的粗細或寬度設定。

想象一下傳統字型的不同樣式,比如細體、中等、粗體,這些都是例項。但可變字型更靈活,你可以在這些固定樣式之間自由調整。舉個例子:如果你覺得中等字型太細,粗體又太粗,你可以選擇一個剛好合適的中間粗細。

字型設計師會在字型裡預先設定一些固定的樣式點(比如"Recursive Light"這樣的),我們可以直接用這些設定好的樣式,也可以透過調整滑塊選擇任何介於這些樣式之間的效果。

Parametric font 引數式字型

引數式字型是一種可變字型,它包含一個或多個引數軸,比如Roboto Flex或Amstelvar。與用於調整字重(wght)和寬度(wdth)等表現性軸不同,引數軸可以精確調整字型的具體特徵,這些特徵的數值可以在不同字型間複用。

由於引數式字型的某些設定可能會導致字型外觀不佳,建議先調整表現性軸,再用引數軸微調。

光學尺寸 Optical sizes

光學尺寸是字型為不同顯示大小專門最佳化的版本。

左邊展示了四種不同光學尺寸(展示型、副標題、正文和說明文字)在各自適合的字號下的效果。右邊展示了它們在相同字號下的對比。

小尺寸(或正文)字型與大尺寸(或展示型)字型相比,通常有這些特點:

這些不同尺寸的版本可以儲存為獨立字型檔案,或在可變字型中透過光學尺寸軸來調節。

Morph axis (MORF) 變形軸

變形軸(CSS中為MORF)是一種特殊的可變字型軸,用於改變字母形狀、大小和位置。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
00601

Kablammo字型為例,調整這個軸的值可以讓字母產生動畫效果,某些字形會呈現出真實的運動感。

Weight axis (wght) 字重軸

字重(CSS中的wght)是可變字型中常見的軸,用於控制字型的粗細程度。Google Fonts CSS v2 API定義的引數範圍:

預設值:最小值:最大值:步進:
400110001
Epilogue

字重指字型筆畫的整體粗細。最常見的是常規(Regular)和粗體(Bold),但範圍可以從極細到極粗。在可變字型中,字重變化是連續的。

在CSS中設定字重的示例:

p {
  font-weight: 350;
}
strong {
  font-weight: 780;
}

不像老式字型只能使用100、200這樣的整數值,可變字型可以使用任意數值來設定字型粗細。比如,你可以把正文設為350(比標準的400稍微細一點),或者把需要強調的文字設為780(比粗體700粗一點,但沒有800那麼粗)。

關於技術細節:CSS規範要求這個字重軸使用大寫字母表示。在使用Google Fonts API時,需要注意URL中的軸名稱排序:小寫的要放在前面,大寫的放在後面,並且都要按字母順序排列。

Width axis (wdth) 寬度軸

寬度軸(CSS中的wdth)用於控制字型的水平寬度。Google Fonts CSS v2 API定義的引數範圍:

預設值:最小值:最大值:步進:
100252000.1

字型的寬度是指字元佔據的水平空間。窄體(condensed)字型比寬體(wide)字型佔用更少的空間。

在CSS中,我們可以使用font-stretch屬性來設定元素的字型寬度。(雖然這個屬性名叫"stretch",但瀏覽器實際上並不會拉伸字型,這個名稱只是為了讓概念更容易理解。)

p {
  font-stretch: 50%;
}
strong {
  font-stretch: 193%;
}

在這個例子中,當我們設定寬度為50%時,文字會變得比正常寬度窄一半。相反,當我們給strong標籤設定193%時,文字會變得比正常寬度接近兩倍寬。記住,100%就是正常寬度,而且所有的寬度值都必須大於0。

關於技術要求:CSS規範裡,這個寬度軸要用大寫字母表示(WDTH)。如果你使用Google Fonts API,記得在網址裡把小寫的軸名放在前面,大寫的放在後面,而且都要按字母順序排。

Optical Size axis (opsz) 光學尺寸軸

光學尺寸是一種可變字型軸,透過CSS的font-optical-sizingfont-variation-setting: 'opsz' VALUE來控制,用於最佳化不同顯示尺寸下的字型效果。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
1461440.1
Amstelvar

光學尺寸(Optical Sizes) 簡單來說,就是為不同顯示尺寸最佳化的字型版本,比如14點或144點。小尺寸(正文)的字型特點是筆畫對比小、間距開放寬鬆、x字高較高;而大尺寸(標題)字型則恰恰相反。

這個軸的數值應該與印刷中的字號(1/72英寸)相匹配。由於瀏覽器無法識別物理尺寸,所以改用CSS的px單位。為此專門引入了font-optical-sizing屬性,預設值為auto,現代瀏覽器都支援這個特性。

body {
  font-optical-sizing: auto;
}

我們可以把它設為none來關閉這個功能,也可以透過font-variation-settings直接設定畫素值:

body {
  font-variation-settings: 'opsz' 16;
}
h1 {
  font-variation-settings: 'opsz' 48;
}

按照CSS規範,這個軸的四字程式碼要用小寫(只有OpenType規範中的五個軸才用小寫)。使用Google Fonts API時,URL中的小寫軸名要放在前面,大寫的放在後面,都需要按字母順序排列。

Slant axis, slnt 傾斜軸

傾斜軸(CSS中的slnt)是一種控制字型傾斜程度的可變字型軸,用於實現斜體效果。

Google Fonts CSS v2 API定義的引數範圍:

預設值:最小值:最大值:步進:
0-90901
Recursive

斜體(Oblique)字元保持直立字型的基本結構,而義大利體(Italic)則有不同的結構,通常基於草書書寫風格。斜體並非簡單的數字傾斜,還需要光學校正來避免變形和重量分佈不當。一般來說,斜體比義大利體少見。

在可變字型中,義大利體軸和傾斜軸密切相關。想了解如何使用這兩個軸,請參考我們的"使用可變字型設定網頁字型樣式"文章。

根據CSS規範,這個軸的四字程式碼必須使用小寫(OpenType規範中只有五個軸使用小寫)。使用Google Fonts API時,URL中要先列出小寫軸名,再列出大寫軸名,且都要按字母順序排列。

Monospace axis, MONO 等寬軸

等寬軸(CSS中的MONO)是一種可變字型軸,用於將字形從比例寬度調整為固定寬度。當字型設定為等寬時,所有字形佔用相同的水平空間。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
0010.01
Recursive

根據CSS規範,這個軸的程式碼必須使用大寫(只有OpenType規範中的五個軸使用小寫)。在使用Google Fonts API時,URL中需要先列出小寫軸名,再列出大寫軸名,且都要按字母順序排列。

Rotation in Z axis (ZROT) Z軸旋轉

Z軸旋轉(CSS中的ZROT)是一些可變字型的特性,它能讓字型看起來在Z軸上旋轉,產生3D效果。Google字型CSS v2 API對這個特性的定義如下:

預設值:最小值:最大值:步長:
0-1801801

預設值0時字元正面朝前,向左旋轉到最小值,向右旋轉到最大值。它可以和控制垂直對齊的其他特性一起使用,比如大寫字母高度軸(YTUC)和降部深度軸(YTDE)。

Edge Highlight axis (EHLT) 邊緣高亮軸

邊緣高亮軸(CSS中的EHLT)用於控制3D字形邊緣高亮部分的厚度。數值以當前字型大小的千分之一em為單位。例如,突出深度設為500時,突出程度為em的50%,即在40px字型大小下為20px。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
12010001

注意:預設值會因字型家族不同而異,而不是統一設定。

當軸設定為0時,使用Nabla字型會完全沒有邊緣效果。

這個軸最早應用於Nabla。它透過等軸測視角實現3D效果。最大設定時的高亮邊緣可以增強字形正面與突出部分的對比度。作為彩色字型的組成部分,預設的白色也可以更改。

Element Grid axis (ELGR) 元素網格軸

元素網格軸(CSS中的ELGR)是一種特殊的可變字型軸,用於控制由相同元素構成的模組化字形中的元素數量。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
1120.1

Handjet字型中的"thx"字母展示了元素網格軸的三種不同設定:每個網格單元一個元素、兩個元素重疊、以及每個網格單元四個元素排列。

元素形狀軸一樣,元素網格會改變字形結構,可能影響字型的最小可讀大小。這兩個軸可以組合使用來創造獨特的圖案效果。

軸的單位是"每網格單元",當值從1變為2時,每個元素會被2x2的四個元素替代。

軸標籤以EL(Element的縮寫)開頭,這個字首用於一組與模組化字型(由元素組成的字形)相關的軸(ELSH、ELGR、ELXP)。

這個軸首次應用於Handjet字型。

元素形狀軸 Element Shape axis (ELSH)

元素形狀軸(CSS中的ELSH)是一種特殊的可變字型軸,用於控制由相同元素組成的模組化字形中每個元素的形狀。元素可以在不同形狀之間突變或漸變。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
001000.1

Handjet字型中,"tak"字母展示了元素形狀軸的三種不同設定:三角形、橢圓形和心形。

與元素網格軸一樣,元素形狀會改變字形結構,可能影響字型的最小可讀大小。

軸標籤以EL(Element的縮寫)開頭,這個字首用於模組化字型相關的軸(ELSH、ELGR、ELXP)。

Extrusion Depth axis (EDPT) 擠出深度軸

擠出深度軸(CSS中為EDPT)用於控制3D字形的深度。數值以當前字型大小的千分之一em為單位。例如,設為500時,突出深度為em的50%,即在40px字型大小下為20px。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
100010001

注意:預設值會因字型家族不同而異。

當把Nabla字型的擠出深度軸設為0時,字型呈現出平面效果。

這個軸首次應用於Nabla彩色字型,透過等距視角實現了3D效果。最大值時字形更深更厚,最小值時僅呈現平面效果。

Fill axis (FILL) 填充軸

填充軸(CSS中的FILL)是一些可變字型中用於控制透明度的軸。它可以將透明形狀變為不透明,有時內部不透明形狀會變透明以保持對比。填充過渡可以從中心、邊緣或角落開始,方向不限。這個特性常用於動畫和互動效果中。數值從0(無填充)到1(完全填充)。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
0010.01

Google的Material圖示庫目前已實現這個特性:

根據CSS規範,這個四字元軸名稱應該使用大寫(因為只有OpenType規範中的五個軸使用小寫)。使用Google Fonts API時,URL中的軸名稱要按順序排列:先是小寫的,然後是大寫的,都需要按字母順序。

Grade axis (GRAD) 字形等級軸

字形等級(CSS中的GRAD)是一種可變字型軸,用於調整筆畫粗細而不改變字型寬度、字間距或字偶距。與調整字重不同,它不會影響文字佈局和換行。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
0-100010001

負值讓字型變細,正值讓字型變粗。

字形等級的單位與字重軸(wght)相同。兩個軸可以配合使用:比如,要達到無障礙指南推薦的Medium(500)字重對比度,可以用Regular(400)字重配合+100的等級值,效果相同且不會導致佈局變化。

根據CSS規範,這個四字元軸名稱應使用大寫(因為只有OpenType規範中的五個軸使用小寫)。使用Google Fonts API時,URL中的軸名稱要按順序排列:先是小寫的,然後是大寫的,都需要按字母順序。

Typeface:Roboto Serif

Hyper Expansion axis (HEXP) 超級擴充套件軸

超級擴充套件軸(CSS中的HEXP)是一種可變字型軸,用於透過增加字形寬度和連線(或間距)來拉伸字形之間的距離。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
001000.1

雖然超級擴充套件軸看起來與寬度軸(wdth)類似,但它主要用於提高阿拉伯文字的可讀性。

Typeface:Readex Pro

Parametric Ascender Height axis, YTAS 引數上升部高度軸

引數上升部高度軸(CSS中為YTAS)是一種可變字型引數軸,用於調整小寫字母上升部的高度。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
750010000

YTAS是"Y-Transparency for Ascenders"的縮寫。它可以與其他Y軸透明度控制(如YTUC和YTDE)配合使用。

根據CSS規範,這個四字元軸名稱應該使用大寫(因為只有OpenType規範中的五個軸使用小寫)。使用Google Fonts API時,URL中的軸名稱要按順序排列:先是小寫的,然後是大寫的,都需要按字母順序。

Parametric Counter Width axis (XTRA) 引數式字元內寬軸

引數式字元內寬軸(CSS中為XTRA)是一種可變字型引數軸,用於調整字元在X軸方向上的內部空間寬度。它可以透過影響每行字元數量來微調文字對齊效果。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
400-100020000

XTRA是"X-Transparent(X軸透明度)"的縮寫,用於控制字形內部和周圍的空白區域。例如,它可以調整"H"字母兩豎線之間的距離,但不會改變筆畫粗細或垂直對齊。這種獨立的調整使其區別於普通的寬度軸。

根據CSS規範,這個四字元軸名稱應使用大寫(因為只有OpenType規範中的五個軸使用小寫)。使用Google Fonts API時,URL中的軸名稱要按順序排列:先是小寫的,然後是大寫的,都需要按字母順序。

Parametric Descender Depth axis (YTDE) 引數下降部深度軸

引數下降部深度軸(CSS中為YTDE)是一種可變字型引數軸,用於調整小寫字母下降部的深度,以負值表示高度。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
-250-100000

YTDE是"Y軸下降部透明度"的縮寫。它可以與其他Y軸透明度控制(如YTAS)配合使用。

根據CSS規範,這個四字元軸名稱應使用大寫(因為只有OpenType規範中的五個軸使用小寫)。使用Google Fonts API時,URL中的軸名稱要按順序排列:先是小寫的,然後是大寫的,都需要按字母順序。

Parametric Figure Height axis (YTFI) 引數式數字高度軸

引數式數字高度軸(CSS中為YTFI)是一種可變字型引數軸,用於透過調整字形內部空間來改變數字的高度。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
600-100020000

YTFI是"數字Y軸透明度"的縮寫,可以與其他控制垂直對齊的Y軸配合使用。

根據CSS規範,這個四字元軸名稱應使用大寫(因為只有OpenType規範中的五個軸使用小寫)。使用Google Fonts API時,URL中的軸名稱要按順序排列:先是小寫的,然後是大寫的,都需要按字母順序。

Parametric Lowercase Height axis (YTLC) 引數式小寫字母高度軸

引數式小寫字母高度軸(CSS中為YTLC)是一種可變字型引數軸,用於調整基線和x高度之間的空間。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
500010000

需要注意的是,這個軸只控制小寫字母的垂直空間,而不是字型的x高度比例。如果要調整x高度,建議同時調整大寫字母高度、上升部高度、下降部深度和數字高度等多個設定。

YTLC是"Y-Transparency for Lower Case(小寫字母Y軸透明度)"的縮寫。它可以與其他控制X軸和Y軸透明度的引數軸配合使用。

根據CSS規範,這個四字元軸名稱應該使用大寫(因為只有OpenType規範中的五個軸使用小寫)。使用Google Fonts API時,URL中的軸名稱要按順序排列:先是小寫的,然後是大寫的,都需要按字母順序。

Parametric Thick Stroke axis (XOPQ) 引數式粗筆畫軸

引數式粗筆畫軸(CSS中為XOPQ)是一種可變字型引數軸,用於調整字元粗筆畫的粗細,比如豎線的粗細。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
88-100020000

XOPQ(X軸不透明度)主要用來調整字形在X軸方向上的粗筆畫,比如"H"字母中豎線的粗細。需要注意的是,在某些字母(如"X"或"O")中,由於筆畫傾斜角度的存在,粗筆畫可能不會完全對齊網格。這個軸與其他兩個軸(引數式細筆畫軸YOPQ和引數式字元內寬軸XTRA)有關聯。

按照CSS規範,這個四字元軸名稱應該使用大寫(因為只有OpenType規範中的五個軸使用小寫)。使用Google Fonts API時,URL中的軸名稱要按順序排列:先是小寫的,然後是大寫的,都需要按字母順序。

Parametric axis 引數軸

引數軸是可變字型中用來調整字型單一特徵的控制器。這些精密的工具主要供專業人士使用,讓他們能像字型設計公司一樣對字型進行微調。

引數軸可以單獨用來調整字重、寬度或高度,但通常需要配合其他設定才能達到理想效果。要掌握這些調整需要豐富的經驗。

不過,這些功能也可以打包成"智慧"功能,讓普通設計師和使用者也能輕鬆使用。比如,引數式字元內寬軸(XTRA)可以和字間距一起調整來改善文字對齊效果。

Parametric Uppercase Height axis (YTUC) 引數式大寫字母高度軸

引數式大寫字母高度軸(CSS中為YTUC)是一種可變字型引數軸,用於調整大寫字母的高度。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
725010000

YTUC是"大寫字母Y軸透明度"的縮寫,常與其他控制垂直對齊的軸(如YTAS升部高度軸)配合使用。

根據CSS規範,這個四字元軸名稱應使用大寫(因為只有OpenType規範中的五個軸使用小寫)。使用Google Fonts API時,URL中的軸名稱要按順序排列:先是小寫的,然後是大寫的,都需要按字母順序。

Axis (in variable fonts) 軸(可變字型中的軸)

在可變字型中,"軸"指的是可以由使用者調整的某個字型設計特徵。

常見的軸包括斜體(Italic)、光學尺寸(Optical Size)、傾斜(Slant)、字重(Weight)和寬度(Width)。這五種軸都在OpenType規範中有明確定義。

字型設計師可以為任何字型特徵建立軸。在CSS中,可以透過font-variation-settings控制所有軸,其中字重用font-weight控制,寬度用font-stretch控制,光學尺寸則由font-optical-sizing自動應用。

Rotation in Y axis (YROT) Y軸旋轉

Y軸旋轉(CSS中為YROT)是一種可變字型軸,可以讓字形在Y軸方向上產生3D旋轉效果。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
0-1801801

預設值0時字元正面朝向觀察者,負值時字元向上旋轉,正值時向下旋轉。這個軸可以和其他控制垂直對齊的軸(如大寫字母高度軸YTUC和下降部深度軸YTDE)配合使用。

Tilt Prisim

Roundness axis ROND 圓度軸

圓度軸(CSS中為ROND)是一種可變字型功能,可以將預設的尖銳稜角形狀變成圓潤版本。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
001001

在Wavefont字型中,調整這個軸可以改變矩形條形圖的樣式,讓每個條形的頂部和底部都帶有較大的圓角。這個軸與柔和度軸(SOFT)相似但略有不同。

SCAN 掃描線軸

掃描線軸(CSS中為SCAN)是一種可變字型功能,用來控制組成字形的掃描線粗細。由於只改變掃描線,不會影響字型的整體寬度、字間距和字偶距,所以調整這個軸不會導致換行或頁面佈局的變化。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
0-1001001

在Workbench字型中,掃描線軸數值越大,每條掃描線的高度就越大。負值讓掃描線變細,正值讓掃描線變粗。

Spacing axis (SPAC) 字元間距軸

字元間距軸(CSS中為SPAC)是一種可變字型功能,用於調整字元之間的整體間距,以預設間距的百分比為單位。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
0-1001000.1

Shantell Sans字型裡有個簡單的例子:字母"tel"可以從正常間距調整到增加33%的間距。

這個功能和我們平常調整字間距的效果差不多。在Shantell Sans字型中,還可以和彈跳效果一起使用,讓字型看起來更有趣。

調整範圍很廣:0是正常間距,-100%讓字母擠得最近,100%讓字母分得最開。你甚至可以精確地調到小數點後面,比如97.5%。

為什麼這個功能比普通的字間距調整要好呢?因為它能更精確地控制間距,而且每種字型的設計師都能為自己的字型設計獨特的間距變化效果。特別是在做動畫,或者在一些不能調整普通字間距的軟體裡,這個功能特別好用。

Vertical Element Alignment axis (YELA) 垂直元素對齊軸

垂直元素對齊軸(CSS中為YELA)是一種可變字型功能,用於調整模組化字型中字形元素的垂直位置。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
0-1001001

在Wavefont字型中,可以看到3組不同長度的4個垂直線條,它們可以分別對齊到底部、中心或頂部。0表示居中對齊,-100%對齊到底部,100%對齊到頂部。這個功能最早在Wavefont字型中引入。

Width axis (wdth) 寬度軸

寬度軸(CSS中為wdth)是可變字型中用來控制字型寬度的引數。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
100252000.1

寬度決定了字型字元佔用的水平空間。窄體(condensed)字型比寬體(wide)字型佔用更少的空間。

在CSS中,我們可以用font-stretch屬性來調整元素的字型寬度。(注意:瀏覽器不會簡單地拉伸字型,這個屬性名只是為了讓概念更容易理解。)

p {
  font-stretch: 50%;
}
strong {
  font-stretch: 193%;
}

在這裡,我們的文字會變得很窄 - 設計師把50%設定為正常寬度(100%)的一半。而strong文字的寬度會是正常寬度的近兩倍。寬度值必須大於0,100%代表正常寬度。

根據當前CSS規範,這個軸的四字程式碼應該使用大寫(因為只有OpenType規範中註冊的五個軸可以使用小寫)。另外,使用Google Fonts API時,URL中小寫軸必須排在前面,大寫軸在後面,且各自按字母順序排列。

Year axis (YEAR) 年份軸

年份軸(CSS中為YEAR)是一種可變字型功能,可以展示字型隨時間變化的效果。

Google Fonts CSS v2 API引數範圍:

預設值:最小值:最大值:步進:
2000-400040001

Climate Crisis字型的年份軸從1979年開始顯示完整的字母,到2050年時字母會逐漸"融化"直至幾乎看不清。

這個功能首次在芬蘭報紙Helsingin Sanomat設計的Climate Crisis字型中使用,用來展示北極冰川隨氣候變化而消融的過程。資料來源於美國國家冰雪資料中心1979-2019年的北極海冰資料,以及政府間氣候變化專門委員會對2050年的預測。

字型的形狀會隨著軸的調整而改變,呈現出類似冰融化的視覺效果。這個軸使用年份作為單位,適用於展示各種歷史程序。目前在Google Fonts軸登錄檔中定義的範圍是從公元前4000年到公元4000年。